Changeset 4171 for LMDZ6/branches/LMDZ-ECRAD/libf/dynphy_lonlat
- Timestamp:
- Jun 17, 2022, 4:24:49 PM (2 years ago)
- Location:
- LMDZ6/branches/LMDZ-ECRAD
- Files:
-
- 2 deleted
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ-ECRAD
- Property svn:mergeinfo changed
-
LMDZ6/branches/LMDZ-ECRAD/libf/dynphy_lonlat/calfis.F
r2604 r4171 29 29 c Auteur : P. Le Van, F. Hourdin 30 30 c ......... 31 USE infotrac, ONLY: nqtot, niadv, tname31 USE infotrac, ONLY: nqtot, tracers 32 32 USE control_mod, ONLY: planet_type, nsplit_phys 33 33 #ifdef CPP_PHYS … … 135 135 c ----------------- 136 136 137 INTEGER i,j,l,ig0,ig,iq,i iq137 INTEGER i,j,l,ig0,ig,iq,itr 138 138 REAL zpsrf(ngridmx) 139 139 REAL zplev(ngridmx,llm+1),zplay(ngridmx,llm) … … 281 281 c --------------- 282 282 c 283 itr=0 283 284 DO iq=1,nqtot 284 iiq=niadv(iq) 285 IF(.NOT.tracers(iq)%isAdvected) CYCLE 286 itr = itr + 1 285 287 DO l=1,llm 286 zqfi(1,l,i q) = pq(1,1,l,iiq)287 ig0 = 2288 zqfi(1,l,itr) = pq(1,1,l,iq) 289 ig0 = 2 288 290 DO j=2,jjm 289 291 DO i = 1, iim 290 zqfi(ig0,l,i q) = pq(i,j,l,iiq)292 zqfi(ig0,l,itr) = pq(i,j,l,iq) 291 293 ig0 = ig0 + 1 292 294 ENDDO 293 295 ENDDO 294 zqfi(ig0,l,i q) = pq(1,jjp1,l,iiq)296 zqfi(ig0,l,itr) = pq(1,jjp1,l,iq) 295 297 ENDDO 296 298 ENDDO … … 481 483 lafin_split=lafin.and.isplit==nsplit_phys 482 484 483 CALL call_physiq(ngridmx,llm,nqtot,tname, 485 ! if (planet_type=="earth") then 486 CALL call_physiq(ngridmx,llm,nqtot,tracers(:)%name, 484 487 & debut_split,lafin_split, 485 488 & jD_cur,jH_cur_split,zdt_split, … … 490 493 & flxwfi,pducov, 491 494 & zdufi,zdvfi,zdtfi,zdqfi,zdpsrf) 492 493 ! if (planet_type=="earth") then494 !495 ! CALL physiq (ngridmx,496 ! . llm,497 ! . debut_split,498 ! . lafin_split,499 ! . jD_cur,500 ! . jH_cur_split,501 ! . zdt_split,502 ! . zplev,503 ! . zplay,504 ! . zphi,505 ! . zphis,506 ! . presnivs,507 ! . zufi,508 ! . zvfi, zrfi,509 ! . ztfi,510 ! . zqfi,511 ! . flxwfi,512 ! . zdufi,513 ! . zdvfi,514 ! . zdtfi,515 ! . zdqfi,516 ! . zdpsrf,517 ! . pducov)518 495 ! 519 496 ! else if ( planet_type=="generic" ) then … … 522 499 ! . llm, !! nlayer 523 500 ! . nqtot, !! nq 524 ! . t name,!! tracer names from dynamical core (given in infotrac)501 ! . tracers(:)%name,!! tracer names from dynamical core (given in infotrac) 525 502 ! . debut_split, !! firstcall 526 503 ! . lafin_split, !! lastcall … … 622 599 pdqfi(:,:,:,:)=0. 623 600 C 601 itr = 0 624 602 DO iq=1,nqtot 625 iiq=niadv(iq) 603 IF(.NOT.tracers(iq)%isAdvected) CYCLE 604 itr = itr + 1 626 605 DO l=1,llm 627 606 DO i=1,iip1 628 pdqfi(i,1,l,i iq) = zdqfi(1,l,iq)629 pdqfi(i,jjp1,l,i iq) = zdqfi(ngridmx,l,iq)607 pdqfi(i,1,l,iq) = zdqfi(1,l,itr) 608 pdqfi(i,jjp1,l,iq) = zdqfi(ngridmx,l,itr) 630 609 ENDDO 631 610 DO j=2,jjm 632 611 ig0=1+(j-2)*iim 633 612 DO i=1,iim 634 pdqfi(i,j,l,i iq) = zdqfi(ig0+i,l,iq)613 pdqfi(i,j,l,iq) = zdqfi(ig0+i,l,itr) 635 614 ENDDO 636 pdqfi(iip1,j,l,i iq) = pdqfi(1,j,l,iq)615 pdqfi(iip1,j,l,iq) = pdqfi(1,j,l,itr) 637 616 ENDDO 638 617 ENDDO -
LMDZ6/branches/LMDZ-ECRAD/libf/dynphy_lonlat/calfis_loc.F
r2604 r4171 45 45 USE Times 46 46 #endif 47 USE infotrac, ONLY: nqtot, niadv, tname47 USE infotrac, ONLY: nqtot, tracers 48 48 USE control_mod, ONLY: planet_type, nsplit_phys 49 49 #ifdef CPP_PHYS … … 154 154 c ----------------- 155 155 156 INTEGER i,j,l,ig0,ig,iq,i iq156 INTEGER i,j,l,ig0,ig,iq,itr 157 157 REAL,ALLOCATABLE,SAVE :: zpsrf(:) 158 158 REAL,ALLOCATABLE,SAVE :: zplev(:,:),zplay(:,:) … … 366 366 c 367 367 368 itr = 0 368 369 DO iq=1,nqtot 369 iiq=niadv(iq) 370 IF(.NOT.tracers(iq)%isAdvected) CYCLE 371 itr = itr + 1 370 372 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 371 373 DO l=1,llm … … 375 377 i=index_i(ig0) 376 378 j=index_j(ig0) 377 zqfi(ig0,l,i q) = pq(i,j,l,iiq)379 zqfi(ig0,l,itr) = pq(i,j,l,iq) 378 380 enddo 379 381 ENDDO … … 731 733 lafin_split=lafin.and.isplit==nsplit_phys 732 734 733 CALL call_physiq(klon,llm,nqtot,t name,735 CALL call_physiq(klon,llm,nqtot,tracers(:)%name, 734 736 & debut_split,lafin_split, 735 737 & jD_cur,jH_cur_split,zdt_split, … … 1069 1071 C 1070 1072 !cdir NODEP 1073 itr = 0 1071 1074 DO iq=1,nqtot 1072 iiq=niadv(iq) 1075 IF(.NOT.tracers(iq)%isAdvected) CYCLE 1076 itr = itr + 1 1073 1077 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1074 1078 DO l=1,llm … … 1079 1083 i=index_i(ig0) 1080 1084 j=index_j(ig0) 1081 pdqfi(i,j,l,i iq) = zdqfi(ig0,l,iq)1082 if (i==1) pdqfi(iip1,j,l,i iq) = zdqfi(ig0,l,iq)1085 pdqfi(i,j,l,iq) = zdqfi(ig0,l,itr) 1086 if (i==1) pdqfi(iip1,j,l,iq) = zdqfi(ig0,l,itr) 1083 1087 ENDDO 1084 1088 1085 1089 IF (is_north_pole_dyn) then 1086 1090 DO i=1,iip1 1087 pdqfi(i,1,l,i iq) = zdqfi(1,l,iq)1091 pdqfi(i,1,l,iq) = zdqfi(1,l,itr) 1088 1092 ENDDO 1089 1093 ENDIF … … 1091 1095 IF (is_south_pole_dyn) then 1092 1096 DO i=1,iip1 1093 pdqfi(i,jjp1,l,i iq) = zdqfi(klon,l,iq)1097 pdqfi(i,jjp1,l,iq) = zdqfi(klon,l,itr) 1094 1098 ENDDO 1095 1099 ENDIF -
LMDZ6/branches/LMDZ-ECRAD/libf/dynphy_lonlat/inigeomphy_mod.F90
r3435 r4171 93 93 ALLOCATE(boundslat_reg(jjm+1,2)) 94 94 95 DO i=1,iim 96 boundslon_reg(i,east)=rlonu(i+1) 97 boundslon_reg(i,west)=rlonu(i) 95 ! specific handling of the -180 longitude scalar grid point boundaries 96 boundslon_reg(1,east)=rlonu(1) 97 boundslon_reg(1,west)=rlonu(iim)-2*PI 98 DO i=2,iim 99 boundslon_reg(i,east)=rlonu(i) 100 boundslon_reg(i,west)=rlonu(i-1) 98 101 ENDDO 99 102 … … 124 127 cufi_glo(1) = cu(1) 125 128 cvfi_glo(1) = cv(1) 126 boundslonfi_glo(1,north_east)= 0129 boundslonfi_glo(1,north_east)=PI 127 130 boundslatfi_glo(1,north_east)=PI/2 128 boundslonfi_glo(1,north_west)= 2*PI131 boundslonfi_glo(1,north_west)=-PI 129 132 boundslatfi_glo(1,north_west)=PI/2 130 boundslonfi_glo(1,south_west)= 2*PI133 boundslonfi_glo(1,south_west)=-PI 131 134 boundslatfi_glo(1,south_west)=rlatv(1) 132 boundslonfi_glo(1,south_east)= 0135 boundslonfi_glo(1,south_east)=PI 133 136 boundslatfi_glo(1,south_east)=rlatv(1) 134 137 DO j=2,jjm … … 141 144 boundslonfi_glo(k,north_east)=rlonu(i) 142 145 boundslatfi_glo(k,north_east)=rlatv(j-1) 143 boundslonfi_glo(k,north_west)=rlonu(i+1) 146 if (i.eq.1) then 147 ! special case for the first longitude's west bound 148 boundslonfi_glo(k,north_west)=rlonu(iim)-2*PI 149 boundslonfi_glo(k,south_west)=rlonu(iim)-2*PI 150 else 151 boundslonfi_glo(k,north_west)=rlonu(i-1) 152 boundslonfi_glo(k,south_west)=rlonu(i-1) 153 endif 144 154 boundslatfi_glo(k,north_west)=rlatv(j-1) 145 boundslonfi_glo(k,south_west)=rlonu(i+1)146 155 boundslatfi_glo(k,south_west)=rlatv(j) 147 156 boundslonfi_glo(k,south_east)=rlonu(i) … … 154 163 cufi_glo(klon_glo) = cu((iim+1)*jjm+1) 155 164 cvfi_glo(klon_glo) = cv((iim+1)*jjm-iim) 156 boundslonfi_glo(klon_glo,north_east)= 0165 boundslonfi_glo(klon_glo,north_east)= PI 157 166 boundslatfi_glo(klon_glo,north_east)= rlatv(jjm) 158 boundslonfi_glo(klon_glo,north_west)= 2*PI167 boundslonfi_glo(klon_glo,north_west)= -PI 159 168 boundslatfi_glo(klon_glo,north_west)= rlatv(jjm) 160 boundslonfi_glo(klon_glo,south_west)= 2*PI169 boundslonfi_glo(klon_glo,south_west)= -PI 161 170 boundslatfi_glo(klon_glo,south_west)= -PI/2 162 boundslonfi_glo(klon_glo,south_east)= 0171 boundslonfi_glo(klon_glo,south_east)= PI 163 172 boundslatfi_glo(klon_glo,south_east)= -Pi/2 164 173 -
LMDZ6/branches/LMDZ-ECRAD/libf/dynphy_lonlat/phylmd/callphysiq_mod.F90
r2604 r4171 20 20 21 21 USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat 22 USE control_mod, ONLY: planet_type 22 USE control_mod, ONLY: planet_type, ok_dyn_xios 23 23 USE physiq_mod, ONLY: physiq 24 #ifdef CPP_XIOS 25 USE mod_xios_dyn3dmem, ONLY : dyn3d_ctx_handle 26 USE xios, ONLY : xios_set_current_context 27 #endif 24 28 IMPLICIT NONE 25 29 … … 90 94 zdpsrf_omp) 91 95 96 ! switching back to LMDZDYN context 97 #ifdef CPP_XIOS 98 !$OMP MASTER 99 if (ok_dyn_xios) then 100 CALL xios_set_current_context(dyn3d_ctx_handle) 101 endif 102 !$OMP END MASTER 103 #endif 104 92 105 93 106 END SUBROUTINE call_physiq -
LMDZ6/branches/LMDZ-ECRAD/libf/dynphy_lonlat/phylmd/ce0l.F90
r2665 r4171 29 29 USE iniphysiq_mod, ONLY: iniphysiq 30 30 USE mod_const_mpi, ONLY: comm_lmdz 31 31 32 #ifdef CPP_PARA 32 33 USE mod_const_mpi, ONLY: init_const_mpi 33 USE parallel_lmdz, ONLY: init_parallel, mpi_rank, omp_rank 34 USE parallel_lmdz, ONLY: init_parallel, mpi_rank, omp_rank, using_mpi 34 35 USE bands, ONLY: read_distrib, distrib_phys 35 36 USE mod_hallo, ONLY: init_mod_hallo 36 37 USE mod_interface_dyn_phys, ONLY: init_interface_dyn_phys 37 #endif 38 #ifdef CPP_XIOS 39 USE xios, only: xios_finalize 40 #endif 41 #endif 42 38 43 USE comconst_mod, ONLY: cpp, daysec, dtphys, dtvr, g, kappa, omeg, r, rad, & 39 44 pi, jmp1 … … 50 55 include "comgeom2.h" 51 56 include "iniprint.h" 57 #ifdef CPP_MPI 58 include 'mpif.h' 59 #endif 60 52 61 REAL :: masque(iip1,jjp1) !--- CONTINENTAL MASK 53 62 REAL :: phis (iip1,jjp1) !--- GROUND GEOPOTENTIAL … … 67 76 REAL, ALLOCATABLE :: masktmp(:) 68 77 69 #ifndef CPP_PARA 78 #ifdef CPP_PARA 79 integer ierr 80 #else 70 81 ! for iniphysiq in serial mode 71 82 INTEGER,PARAMETER :: mpi_rank=0 … … 168 179 ocemask = ocetmp 169 180 IF(dlat_omask(1)<dlat_omask(jml_omask)) THEN 170 DO j=1,jjp1; ocemask(:,j) = ocetmp(:,jjp1-j+1); END DO 181 DO j=1,jjp1 182 ocemask(:,j) = ocetmp(:,jjp1-j+1) 183 END DO 171 184 END IF 172 185 DEALLOCATE(ocetmp,lon_omask,lat_omask,dlon_omask,dlat_omask) … … 239 252 #ifdef CPP_PARA 240 253 END IF 254 #ifdef CPP_XIOS 255 CALL xios_finalize 256 #endif 257 #ifdef CPP_MPI 258 IF (using_mpi) call MPI_FINALIZE(ierr) 259 #endif 241 260 #endif 242 261 -
LMDZ6/branches/LMDZ-ECRAD/libf/dynphy_lonlat/phylmd/etat0dyn_netcdf.F90
r3435 r4171 39 39 USE comvert_mod, ONLY: ap, bp, preff, pressure_exner 40 40 USE temps_mod, ONLY: annee_ref, day_ref, itau_dyn, itau_phy, start_time 41 USE strings_mod, ONLY: strLower 41 42 42 43 IMPLICIT NONE … … 74 75 USE exner_hyb_m, ONLY: exner_hyb 75 76 USE exner_milieu_m, ONLY: exner_milieu 76 USE infotrac, ONLY: nqtot, t name77 USE infotrac, ONLY: nqtot, tracers 77 78 USE filtreg_mod 78 79 IMPLICIT NONE … … 84 85 ! Local variables: 85 86 CHARACTER(LEN=256) :: modname, fmt 86 INTEGER :: i, j, l, ji, itau, iday 87 INTEGER :: i, j, l, ji, itau, iday, iq 87 88 REAL :: xpn, xps, time, phystep 88 89 REAL, DIMENSION(iip1,jjp1) :: psol … … 145 146 ! Look for ozone tracer: 146 147 #ifndef INCA 147 DO i =1,nqtot; IF(ANY(["O3","o3"]==tname(i))) EXIT; END DO148 IF(i /=nqtot+1) THEN148 DO iq=1,nqtot; IF(strLower(tracers(iq)%name)=="o3") EXIT; END DO 149 IF(iq/=nqtot+1) THEN 149 150 CALL regr_lat_time_coefoz 150 151 CALL press_coefoz 151 CALL regr_pr_o3(p3d, q3d(:,:,:,i ))152 q3d(:,:,:,i )=q3d(:,:,:,i)*48./ 29.!--- Mole->mass fraction152 CALL regr_pr_o3(p3d, q3d(:,:,:,iq)) 153 q3d(:,:,:,iq)=q3d(:,:,:,iq)*48./ 29. !--- Mole->mass fraction 153 154 END IF 154 155 #endif -
LMDZ6/branches/LMDZ-ECRAD/libf/dynphy_lonlat/phylmd/etat0phys_netcdf.F90
r3773 r4171 93 93 USE conf_phys_m, ONLY: conf_phys 94 94 USE init_ssrf_m, ONLY: start_init_subsurf 95 USE phys_state_var_mod, ONLY: beta_aridity, delta_tsurf, awake_dens, cv_gen, & 96 ratqs_inter, rneb_ancien 95 97 !use ioipsl_getincom 96 98 IMPLICIT NONE … … 119 121 INTEGER :: flag_aerosol 120 122 INTEGER :: flag_aerosol_strat 123 INTEGER :: flag_volc_surfstrat 121 124 LOGICAL :: flag_aer_feedback 122 125 LOGICAL :: flag_bc_internal_mixture … … 126 129 LOGICAL :: filtre_oro=.false. 127 130 131 INCLUDE "compbl.h" 132 INCLUDE "alpale.h" 133 128 134 deg2rad= pi/180.0 129 135 iml=assert_eq(SIZE(masque,1),SIZE(phis,1),TRIM(modname)//" iml") … … 138 144 iflag_cldcon, & 139 145 iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, & 140 ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, & 141 aerosol_couple, & 142 chemistry_couple, flag_aerosol, flag_aerosol_strat, & 143 flag_aer_feedback, & 144 flag_bc_internal_mixture, bl95_b0, bl95_b1, & 146 ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, flag_volc_surfstrat, & 147 aerosol_couple, chemistry_couple, flag_aerosol, flag_aerosol_strat, & 148 flag_aer_feedback, flag_bc_internal_mixture, bl95_b0, bl95_b1, & 145 149 read_climoz, alp_offset) 146 150 CALL phys_state_var_init(read_climoz) … … 231 235 wake_delta_pbl_TKE(:,:,:)=0 232 236 wake_dens(:)=0 237 awake_dens = 0. 238 cv_gen = 0. 233 239 ale_bl = 0. 234 240 ale_bl_trig =0. … … 240 246 241 247 z0m(:,is_oce) = rugmer(:) 242 z0m(:,is_ter) = MAX(1.0e-05,zstd(:)*zsig(:)/2.0)243 z0m(:,is_lic) = MAX(1.0e-05,zstd(:)*zsig(:)/2.0)248 z0m(:,is_ter) = 0.01 !MAX(1.0e-05,zstd(:)*zsig(:)/2.0) 249 z0m(:,is_lic) = 0.001 !MAX(1.0e-05,zstd(:)*zsig(:)/2.0) 244 250 z0m(:,is_sic) = 0.001 245 251 z0h(:,:)=z0m(:,:) … … 273 279 CALL fonte_neige_init(run_off_lic_0) 274 280 CALL pbl_surface_init( fder, snsrf, qsurf, tsoil ) 281 282 IF (iflag_pbl>1 .AND. iflag_wake>=1 .AND. iflag_pbl_split >=1) then 283 delta_tsurf = 0. 284 beta_aridity = 0. 285 end IF 286 287 ratqs_inter = 0.002 288 rneb_ancien = 0. 275 289 CALL phyredem( "startphy.nc" ) 276 290 -
LMDZ6/branches/LMDZ-ECRAD/libf/dynphy_lonlat/phylmd/iniphysiq_mod.F90
r3677 r4171 16 16 USE mod_phys_lmdz_para, ONLY: klon_omp ! number of columns (on local omp grid) 17 17 USE vertical_layers_mod, ONLY : init_vertical_layers 18 USE infotrac, ONLY: nqtot,nqo,nbtr,tname,ttext,type_trac,& 19 niadv,conv_flg,pbl_flg,solsym,& 20 nqfils,nqdesc,nqdesc_tot,iqfils,iqpere,& 21 ok_isotopes,ok_iso_verif,ok_isotrac,& 22 ok_init_iso,niso_possibles,tnat,& 23 alpha_ideal,use_iso,iqiso,iso_num,& 24 iso_indnum,zone_num,phase_num,& 25 indnum_fn_num,index_trac,& 26 niso,ntraceurs_zone,ntraciso 18 USE infotrac, ONLY: nbtr,nqCO2,tracers,isotopes,type_trac,conv_flg,pbl_flg,nqtottr 27 19 #ifdef CPP_StratAer 28 USE infotrac , ONLY: nbtr_bin, nbtr_sulgas, id_OCS_strat, &20 USE infotrac_phy, ONLY: nbtr_bin, nbtr_sulgas, id_OCS_strat, & 29 21 id_SO2_strat, id_H2SO4_strat, id_BIN01_strat 30 22 … … 116 108 117 109 !!$OMP PARALLEL DEFAULT(SHARED) COPYIN(/temps/) 118 !$OMP PARALLEL DEFAULT(SHARED) &119 110 ! Copy all threadprivate variables in temps_mod 120 !$OMP COPYIN(annee_ref, day_ini, day_ref,start_time)111 !$OMP PARALLEL DEFAULT(SHARED) COPYIN(annee_ref,day_ini,day_ref,start_time) 121 112 122 113 ! Initialize physical constants in physics: … … 146 137 147 138 ! Initialize tracer names, numbers, etc. for physics 148 CALL init_infotrac_phy(nqtot,nqo,nbtr,tname,ttext,type_trac,& 149 niadv,conv_flg,pbl_flg,solsym,& 150 nqfils,nqdesc,nqdesc_tot,iqfils,iqpere,& 151 ok_isotopes,ok_iso_verif,ok_isotrac,& 152 ok_init_iso,niso_possibles,tnat,& 153 alpha_ideal,use_iso,iqiso,iso_num,& 154 iso_indnum,zone_num,phase_num,& 155 indnum_fn_num,index_trac,& 156 niso,ntraceurs_zone,ntraciso& 157 #ifdef CPP_StratAer 158 ,nbtr_bin,nbtr_sulgas& 159 ,id_OCS_strat,id_SO2_strat,id_H2SO4_strat,id_BIN01_strat& 160 #endif 161 ) 139 CALL init_infotrac_phy(type_trac, tracers, isotopes, nqtottr, nqCO2, pbl_flg, conv_flg) 162 140 163 141 ! Initializations for Reprobus … … 172 150 !$OMP END PARALLEL 173 151 174 IF (type_trac == 'inca') THEN 175 #ifdef INCA 176 call init_const_lmdz( & 177 anneeref,dayref, iphysiq,day_step,nday, & 178 nbsrf, is_oce,is_sic, is_ter,is_lic, calend, & 179 config_inca) 180 call init_inca_para( & 181 nbp_lon,nbp_lat,nbp_lev,klon_glo,mpi_size, & 182 distrib_phys,communicator) 183 #endif 184 END IF 152 185 153 IF (type_trac == 'repr') THEN 186 154 #ifdef REPROBUS … … 198 166 END IF 199 167 200 IF (type_trac == 'inca' ) THEN168 IF (type_trac == 'inca' .OR. type_trac == 'inco') THEN 201 169 #ifdef INCA 202 CALL init_inca_dim (klon_omp,nbp_lev,nbp_lon,nbp_lat - 1, &203 rlonudyn, rlatudyn,rlonvdyn,rlatvdyn)170 CALL init_inca_dim_reg(nbp_lon, nbp_lat - 1, & 171 rlonudyn, rlatudyn, rlonvdyn, rlatvdyn) 204 172 #endif 205 IF (type_trac == 'repr') THEN206 #ifdef REPROBUS207 CALL Init_chem_rep_phys(klon_omp,nbp_lev)208 #endif209 END IF210 173 END IF 211 174
Note: See TracChangeset
for help on using the changeset viewer.