Changeset 4301 for LMDZ6/trunk/libf/dyn3dmem
- Timestamp:
- Oct 20, 2022, 1:57:21 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/dyn3dmem/dynetat0_loc.F90
r4270 r4301 8 8 USE parallel_lmdz 9 9 USE infotrac, ONLY: nqtot, tracers, niso, iqIsoPha, tnat, alpha_ideal, iH2O 10 USE strings_mod, ONLY: maxlen, msg, strStack, real2str 10 USE strings_mod, ONLY: maxlen, msg, strStack, real2str, int2str 11 11 USE netcdf, ONLY: NF90_OPEN, NF90_NOWRITE, NF90_INQUIRE_DIMENSION, NF90_INQ_VARID, & 12 12 NF90_CLOSE, NF90_GET_VAR, NF90_INQUIRE_VARIABLE, NF90_NoErr 13 USE readTracFiles_mod, ONLY: new2old Name13 USE readTracFiles_mod, ONLY: new2oldH2O, newHNO3, oldHNO3 14 14 USE control_mod, ONLY: planet_type 15 15 USE assert_eq_m, ONLY: assert_eq … … 41 41 CHARACTER(LEN=maxlen) :: mesg, var, modname, oldVar 42 42 INTEGER, PARAMETER :: length=100 43 INTEGER :: iq, fID, vID, idecal, ierr, iqParent, iName, iZone, iPhase 43 INTEGER :: iq, fID, vID, idecal, ierr, iqParent, iName, iZone, iPhase, ix 44 44 REAL :: time, tab_cntrl(length) !--- RUN PARAMS TABLE 45 45 REAL, ALLOCATABLE :: vcov_glo(:,:),masse_glo(:,:), ps_glo(:) 46 46 REAL, ALLOCATABLE :: ucov_glo(:,:), q_glo(:,:), phis_glo(:) 47 47 REAL, ALLOCATABLE :: teta_glo(:,:) 48 LOGICAL :: l OldHNO3, ll48 LOGICAL :: lSkip, ll 49 49 !------------------------------------------------------------------------------- 50 50 modname="dynetat0_loc" … … 152 152 !--- Tracers 153 153 ALLOCATE(q_glo(ip1jmp1,llm)) 154 ll =.FALSE.154 ll = .FALSE. 155 155 #ifdef REPROBUS 156 !--- .TRUE. for old convention: HNO3 = g+l and HNO3_g = g (new convention: HNO3tot = g+l and HNO3 = g) 157 ll = NF90_INQ_VARID(fID, 'HNO3tot', vID) /= NF90_NoErr 156 ll = NF90_INQ_VARID(fID, 'HNO3tot', vID) /= NF90_NoErr !--- DETECT OLD REPRO start.nc FILE 158 157 #endif 159 158 DO iq=1,nqtot 160 159 var = tracers(iq)%name 161 oldVar = new2oldName(var) 162 lOldHNO3 = ll .AND. (var == 'HNO3' .OR. var == 'HNO3_g') 163 !-------------------------------------------------------------------------------------------------------------------------- 164 IF(NF90_INQ_VARID(fID, var, vID) == NF90_NoErr .AND. .NOT.lOldHNO3) THEN !=== REGULAR CASE 160 oldVar = new2oldH2O(var) 161 lSkip = ll .AND. var == 'HNO3' !--- FORCE "HNO3_g" READING FOR "HNO3" 162 #ifdef REPROBUS 163 ix = strIdx(newHNO3, var); IF(ix /= 0) oldVar = oldHNO3(ix) !--- REPROBUS HNO3 exceptions 164 #endif 165 #ifdef INCA 166 IF(var == 'O3') oldVar = 'OX' !--- DEAL WITH INCA OZONE EXCEPTION 167 #endif 168 !-------------------------------------------------------------------------------------------------------------------------- 169 IF(NF90_INQ_VARID(fID, var, vID) == NF90_NoErr .AND. .NOT.lSkip) THEN !=== REGULAR CASE: AVAILABLE VARIABLE 165 170 CALL get_var2(var,q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:) 166 171 !-------------------------------------------------------------------------------------------------------------------------- 167 ELSE IF(NF90_INQ_VARID(fID, oldVar, vID) == NF90_NoErr) THEN !=== OLDNAME172 ELSE IF(NF90_INQ_VARID(fID, oldVar, vID) == NF90_NoErr) THEN !=== TRY WITH ALTERNATE NAME 168 173 CALL msg('Tracer <'//TRIM(var)//'> is missing => initialized to <'//TRIM(oldVar)//'>', modname) 169 174 CALL get_var2(oldVar, q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:) 170 !--------------------------------------------------------------------------------------------------------------------------171 #ifdef REPROBUS172 ELSE IF(lOldHNO3 .AND. var == 'HNO3') THEN !=== REPROBUS: HNO3_g INSTEAD OF HNO3173 CALL msg('Tracer <HNO3_g> is used for <HNO3> (old convention)', modname)174 CALL get_var2( 'HNO3_g', q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:)175 ELSE IF(lOldHNO3 .AND. var == 'HNO3tot') THEN !=== REPROBUS: HNO3 INSTEAD OF HNO3tot176 CALL msg('Tracer <HNO3> is used for <HNO3tot> (old convention)', modname)177 CALL get_var2( 'HNO3', q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:)178 #endif179 #ifdef INCA180 ELSE IF(NF90_INQ_VARID(fID, 'OX', vID) == NF90_NoErr .AND. var == 'O3') THEN !=== INCA: OX INSTEAD OF O3181 CALL msg('Tracer <O3> is missing => initialized to <OX>', modname)182 CALL get_var2( 'OX' , q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:)183 #endif184 175 !-------------------------------------------------------------------------------------------------------------------------- 185 176 ELSE IF(tracers(iq)%iso_iGroup == iH2O .AND. niso > 0) THEN !=== WATER ISOTOPES … … 214 205 CHARACTER(LEN=*), INTENT(IN) :: str1, str2 215 206 CHARACTER(LEN=maxlen) :: s1, s2 216 IF(n1/=n2) THEN 217 s1='value of '//TRIM(str1)//' =' 218 s2=' read in starting file differs from parametrized '//TRIM(str2)//' =' 219 WRITE(mesg,'(10x,a,i4,2x,a,i4)')TRIM(ADJUSTL(s1)),n1,TRIM(ADJUSTL(s2)),n2 220 CALL ABORT_gcm(TRIM(modname),TRIM(mesg),1) 221 END IF 207 IF(n1/=n2) CALL abort_gcm(TRIM(modname), 'value of "'//TRIM(str1)//'" = '//TRIM(int2str(n1))// & 208 ' read in starting file differs from gcm value of "'//TRIM(str2)//'" = '//TRIM(int2str(n2)), 1) 222 209 END SUBROUTINE check_dim 223 210
Note: See TracChangeset
for help on using the changeset viewer.