Ignore:
Timestamp:
Apr 7, 2016, 3:53:15 PM (9 years ago)
Author:
emillour
Message:

Mars GCM:

  • Some fixes for buggy outputs in 1D introduced by previous code modifications.
  • made statto.h a module.
  • ecritphy in dyn3d/control_mod.F90 should be an integer, not a real.

EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/libf/phymars/writediagfi.F

    r1528 r1532  
    6363      real*4 dx1(nbp_lev)           ! to store a 1D (column) data set
    6464      real*4 dx0
     65      real*4 dx3_1d(1,nbp_lev) ! to store a profile with 1D model
     66      real*4 dx2_1d ! to store a surface value with 1D model
    6567
    6668      real*4,save :: date
     69!$OMP THREADPRIVATE(date)
    6770
    6871      REAL phis((nbp_lon+1),nbp_lat)
     
    7578      integer,save :: zitau=0
    7679      character(len=20),save :: firstnom='1234567890'
     80!$OMP THREADPRIVATE(zitau,firstnom)
    7781
    7882! Ajouts
    7983      integer, save :: ntime=0
     84!$OMP THREADPRIVATE(ntime)
    8085      integer :: idim,varid
    8186      integer :: nid
     
    9297      character(len=120),save :: nom_def(n_nom_def_max)
    9398      logical,save :: firstcall=.true.
     99!$OMP THREADPRIVATE(firstcall)  !diagfi_def,n_nom_def,nom_def read in diagfi.def
    94100     
    95 #ifndef MESOSCALE
    96 
    97101#ifdef CPP_PARA
    98102! Added to work in parallel mode
     
    127131         firstcall=.false.
    128132
     133!$OMP MASTER
    129134  !      Open diagfi.def definition file if there is one:
    130135         open(99,file="diagfi.def",status='old',form='formatted',
     
    150155            diagfi_def=.false.
    151156         endif
     157!$OMP END MASTER
     158!$OMP BARRIER
    152159      END IF ! of IF (firstcall)
    153160
     
    214221
    215222         ! Build phis() and area()
    216          do i=1,nbp_lon+1 ! poles
     223         IF (klon_glo>1) THEN
     224          do i=1,nbp_lon+1 ! poles
    217225           phis(i,1)=phisfi_glo(1)
    218226           phis(i,nbp_lat)=phisfi_glo(klon_glo)
     
    220228           area(i,1)=areafi_glo(1)/nbp_lon
    221229           area(i,nbp_lat)=areafi_glo(klon_glo)/nbp_lon
    222          enddo
    223          do j=2,nbp_lat-1
     230          enddo
     231          do j=2,nbp_lat-1
    224232           ig0= 1+(j-2)*nbp_lon
    225233           do i=1,nbp_lon
     
    230238           phis(nbp_lon+1,j)=phis(1,j)
    231239           area(nbp_lon+1,j)=area(1,j)
    232          enddo
     240          enddo
     241         ENDIF
    233242         
    234243         ! write "header" of file (longitudes, latitudes, geopotential, ...)
    235          call iniwrite(nid,day_ini,phis,area)
     244         IF (klon_glo>1) THEN ! general 3D case
     245           call iniwrite(nid,day_ini,phis,area,nbp_lon+1,nbp_lat)
     246         ELSE ! 1D model
     247           call iniwrite(nid,day_ini,phisfi_glo(1),areafi_glo(1),1,1)
     248         ENDIF
    236249
    237250         endif ! of if (is_master)
     
    248261      endif ! if (firstnom.eq.'1234567890')
    249262
    250       if (ngrid.eq.1) then
     263      if (klon_glo.eq.1) then
    251264        ! in testphys1d, for the 1d version of the GCM, iphysiq and irythme
    252265        ! are undefined; so set them to 1
    253266        iphysiq=1
    254267        irythme=1
    255         ! NB:
    256268      endif
    257269
     
    320332!         Passage variable physique -->  variable dynamique
    321333!         recast (copy) variable from physics grid to dynamics grid
     334          IF (klon_glo>1) THEN ! General case
    322335           DO l=1,nbp_lev
    323336             DO i=1,nbp_lon+1
     
    333346             ENDDO
    334347           ENDDO
     348          ELSE ! 1D model case
     349           dx3_1d(1,1:nbp_lev)=px(1,1:nbp_lev)
     350          ENDIF
    335351#endif
    336352!         Ecriture du champs
     
    360376           corner(4)=ntime
    361377
    362            edges(1)=nbp_lon+1
     378           IF (klon_glo==1) THEN
     379             edges(1)=1
     380           ELSE
     381             edges(1)=nbp_lon+1
     382           ENDIF
    363383           edges(2)=nbp_lat
    364384           edges(3)=nbp_lev
     
    371391!           write(*,*)"       edges()=",edges
    372392!           write(*,*)"       dx3()=",dx3
    373            ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx3)
     393           IF (klon_glo>1) THEN ! General case
     394             ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx3)
     395           ELSE
     396             ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx3_1d)
     397           ENDIF
    374398!#endif
    375399
    376400           if (ierr.ne.NF_NOERR) then
    377401              write(*,*) "***** PUT_VAR problem in writediagfi"
    378               write(*,*) "***** with ",nom
     402              write(*,*) "***** with dx3: ",nom
    379403              write(*,*) 'ierr=', ierr,": ",NF_STRERROR(ierr)
    380 c             call abort
     404              stop
    381405           endif
    382406
     
    405429!         Passage variable physique -->  physique dynamique
    406430!         recast (copy) variable from physics grid to dynamics grid
    407 
     431          IF (klon_glo>1) THEN ! General case
    408432             DO i=1,nbp_lon+1
    409433                dx2(i,1)=px(1,1)
     
    417441                dx2(nbp_lon+1,j)=dx2(1,j)
    418442             ENDDO
     443          ELSE ! 1D model case
     444            dx2_1d=px(1,1)
     445          ENDIF
    419446#endif
    420447
     
    442469           corner(2)=1
    443470           corner(3)=ntime
    444            edges(1)=nbp_lon+1
     471           IF (klon_glo==1) THEN
     472             edges(1)=1
     473           ELSE
     474             edges(1)=nbp_lon+1
     475           ENDIF
    445476           edges(2)=nbp_lat
    446477           edges(3)=1
     
    450481!           ierr = NF_PUT_VARA_DOUBLE (nid,varid,corner,edges,dx2)
    451482!#else         
    452            ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx2)
     483           IF (klon_glo>1) THEN ! General case
     484             ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx2)
     485           ELSE
     486             ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx2_1d)
     487           ENDIF
    453488!#endif     
    454489
    455490           if (ierr.ne.NF_NOERR) then
    456491              write(*,*) "***** PUT_VAR matter in writediagfi"
    457               write(*,*) "***** with ",nom
     492              write(*,*) "***** with dx2: ",nom
    458493              write(*,*) 'ierr=', ierr,": ",NF_STRERROR(ierr)
    459 c             call abort
     494              stop
    460495           endif
    461496
     
    505540           if (ierr.ne.NF_NOERR) then
    506541              write(*,*) "***** PUT_VAR problem in writediagfi"
    507               write(*,*) "***** with ",nom
     542              write(*,*) "***** with dx1: ",nom
    508543              write(*,*) 'ierr=', ierr,": ",NF_STRERROR(ierr)
    509 c             call abort
     544              stop
    510545           endif
    511546
     
    543578           if (ierr.ne.NF_NOERR) then
    544579              write(*,*) "***** PUT_VAR matter in writediagfi"
    545               write(*,*) "***** with ",nom
     580              write(*,*) "***** with dx0: ",nom
    546581              write(*,*) 'ierr=', ierr,": ",NF_STRERROR(ierr)
    547 c             call abort
     582              stop
    548583           endif
    549584
     
    558593      endif
    559594
    560 #endif
    561595      end
Note: See TracChangeset for help on using the changeset viewer.