#include "dims.h" ! subroutine dynamics(lat,ixtime) use bndry_module,only: bndcmp use crates_module,only: chemrates_tdep implicit none #include "params.h" #include "buff.h" #include "fcom.h" #include "index.h" ! ! Dynamics driver: called from advnce in the main multi-tasked ! latitude loop. The f-array is private to each processor ! (fcom.h is task common). ! These routines and those below them use f(:,njm2-njm1-nj-njp1-nmp2) ! from the previous time iteration and output new latitude calculations ! in f(:,njnp). nj is integer pointer to current latitude fields in ! the f-array. (input arg lat is current latitude index). ! ! Args: integer,intent(in) :: lat,ixtime ! ! Local: logical :: print=.false. ! if (print) write(6,"('dynamics: lat=',i3)") lat ! C **** C **** CALL TO BNDCMP SHOULD LEAD CALLS IN DYNAMICS SECTION OF C **** ADVNCE TO ENSURE THAT MATRICES B(ZIMXP,2,2) AND VECTORS C **** FB(ZIMXP,2) ARE AVAILABLE WHEN NEEDED C **** CALL BNDCMP if (print) write(6,"('dynamics after bndcmp')") C **** C **** CALCULATE W AT N*DT C **** CALL SWDOT if (print) write(6,"('dynamics after swdot')") C **** C **** CALCULATE ION DRIFT VELOCITY C **** CALL VDRIFT2 if (print) write(6,"('dynamics after vdrift2')") C **** CALCULATE CP, KT, AND KM CALL CPKTKM if (print) write(6,"('dynamics after cpktkm')") C **** CALCULATE COLUMN NUMBER DENSITIES CALL CHAPMN if (print) write(6,"('dynamics after chapmn')") C **** CALCULATE SOLAR HEATING C **** CALCULATE REACTION RATES ! call altv ! calc tvib: see tvib in crates_tdep.h, rates.f ! CALL RATES call chemrates_tdep if (print) write(6,"('dynamics after rates')") CALL QRJ if (print) write(6,"('dynamics after qrj')") C **** CALCULATE BACKGROUND (NIGHT-TIME) IONIZATION CALL QINITE C **** ADD IONIZATION DUE TO SOLAR X-RAYS CALL XRAY C **** GENERATE AURORAL FIELDS, UI, VI, WI. FIELDS RETURNED C **** IN T1 THRU T7 CALL HEELIS if (print) write(6,"('dynamics after heelis')") C **** CALCULATE AURORAL ADDITIONS TO IONIZATION RATES CALL ORORA if (print) write(6,"('dynamics after orora')") C **** SOLVE FOR N(O+) C **** SET FLUX AT UPPER BOUNDARY CALL OPFLUX if (print) write(6,"('dynamics after opflux')") CALL OPLUS if (print) write(6,"('dynamics after oplus')") C **** COMPUTE ELECTRON DENSITY, N(E), AND ION NUMBER DENSITIES, C **** N(O2+), N(N2+), N(NO+), N(N+) CALL ELDEN if (print) write(6,"('dynamics after elden')") C **** ION-DRAG PARAMETERS, LXX, LYY, LXY (IN DIPOLE COORDINATE C **** SYSTEM) CALL LAMDAS if (print) write(6,"('dynamics after lamdas')") C **** ROTATE LAMDAS TO GEOGRAPHIC SYSTEM CALL ROTATE C **** ELECTRON PRODUCTION OF N4S AND N2D CALL QTIEFF(lat) C **** ODD NITROGEN CHEMISTRY CALL CMPN2D CALL CMPN4S CALL CMPNO CALL CMPO2O if (print) write(6,"('dynamics after cmpo2o')") C **** HEATING AND O2 DISSOCIATION DUE TO ODD NITROGEN AND ION C **** CHEMISTRY CALL QJNNO CALL QJION C **** CALCULATE ELECTRON AND ION TEMPERATURES CALL SETTEI C **** CALCULATE IMPLICIT AND EXPLICIT COOLING TERMS IN NWTI C **** AND NWTE CALL NEWTON C **** ADD IN O3P COOLING CALL NEWTO3P C **** CALCULATE FLF, FPH, NQDH, NKMH, NPSDH, NPSDH2 C **** AT (N-1)*DT ! ! hdif3 uses kld terms calculated in hdif2, and ! defines nflh,nfph,nqdh,npsdh,npsdh2 in f-array ! call hdif3(lat,ixtime) if (print) write(6,"('dynamics after hdif3')") ! C **** ADVANCE T, U, V BY ONE TIME STEP CALL DT CALL DUV C **** COMPOSITION OF MAJOR SPECIES CALL COMP end subroutine dynamics