Ignore:
Timestamp:
Apr 25, 2014, 7:11:59 PM (10 years ago)
Author:
fhourdin
Message:

Enrichissement des sorties du guidage
Enriched outputs for nudging

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/branches/testing/libf/dyn3d/guide_mod.F90

    r1910 r2024  
    437437! Sauvegarde du guidage?
    438438    f_out=((MOD(itau,iguide_sav).EQ.0).AND.guide_sav) 
    439     IF (f_out) CALL guide_out("S",jjp1,1,ps)
     439    IF (f_out) CALL guide_out("SP",jjp1,1,ps)
    440440   
    441441    if (guide_u) then
     
    447447        if (guide_zon) CALL guide_zonave(1,jjp1,llm,f_add)
    448448        CALL guide_addfield(ip1jmp1,llm,f_add,alpha_u)
    449         IF (f_out) CALL guide_out("U",jjp1,llm,f_add/factt)
     449        IF (f_out) CALL guide_out("ua",jjp1,llm,(1.-tau)*ugui1+tau*ugui2)
     450        IF (f_out) CALL guide_out("u",jjp1,llm,ucov)
     451        IF (f_out) CALL guide_out("ucov",jjp1,llm,f_add/factt)
    450452        ucov=ucov+f_add
    451453    endif
     
    459461        if (guide_zon) CALL guide_zonave(2,jjp1,llm,f_add)
    460462        CALL guide_addfield(ip1jmp1,llm,f_add,alpha_T)
    461         IF (f_out) CALL guide_out("T",jjp1,llm,f_add/factt)
     463        IF (f_out) CALL guide_out("teta",jjp1,llm,f_add/factt)
    462464        teta=teta+f_add
    463465    endif
     
    471473        if (guide_zon) CALL guide_zonave(2,jjp1,1,f_add(1:ip1jmp1,1))
    472474        CALL guide_addfield(ip1jmp1,1,f_add(1:ip1jmp1,1),alpha_P)
    473         IF (f_out) CALL guide_out("P",jjp1,1,f_add(1:ip1jmp1,1)/factt)
     475        IF (f_out) CALL guide_out("ps",jjp1,1,f_add(1:ip1jmp1,1)/factt)
    474476        ps=ps+f_add(1:ip1jmp1,1)
    475477        CALL pression(ip1jmp1,ap,bp,ps,p)
     
    485487        if (guide_zon) CALL guide_zonave(2,jjp1,llm,f_add)
    486488        CALL guide_addfield(ip1jmp1,llm,f_add,alpha_Q)
    487         IF (f_out) CALL guide_out("Q",jjp1,llm,f_add/factt)
     489        IF (f_out) CALL guide_out("q",jjp1,llm,f_add/factt)
    488490        q=q+f_add
    489491    endif
     
    497499        if (guide_zon) CALL guide_zonave(2,jjm,llm,f_add(1:ip1jm,:))
    498500        CALL guide_addfield(ip1jm,llm,f_add(1:ip1jm,:),alpha_v)
    499         IF (f_out) CALL guide_out("V",jjm,llm,f_add(1:ip1jm,:)/factt)
     501        IF (f_out) CALL guide_out("v",jjm,llm,vcov)
     502        IF (f_out) CALL guide_out("va",jjm,llm,(1.-tau)*vgui1+tau*vgui2)
     503        IF (f_out) CALL guide_out("vcov",jjm,llm,f_add(1:ip1jm,:)/factt)
    500504        vcov=vcov+f_add(1:ip1jm,:)
    501505    endif
     
    15071511   
    15081512    ! Variables entree
    1509     CHARACTER, INTENT(IN)                          :: varname
     1513    CHARACTER*(*), INTENT(IN)                          :: varname
    15101514    INTEGER,   INTENT (IN)                         :: hsize,vsize
    15111515    REAL, DIMENSION (iip1,hsize,vsize), INTENT(IN) :: field
     
    15161520    INTEGER       :: nid, id_lonu, id_lonv, id_latu, id_latv, id_tim, id_lev
    15171521    INTEGER       :: vid_lonu,vid_lonv,vid_latu,vid_latv,vid_cu,vid_cv,vid_lev
     1522    INTEGER       :: vid_au,vid_av
    15181523    INTEGER, DIMENSION (3) :: dim3
    15191524    INTEGER, DIMENSION (4) :: dim4,count,start
    1520     INTEGER                :: ierr, varid
     1525    INTEGER                :: ierr, varid,l
     1526    REAL, DIMENSION (iip1,hsize,vsize) :: field2
    15211527
    15221528    print *,'Guide: output timestep',timestep,'var ',varname
     
    15421548        ierr=NF_DEF_VAR(nid,"LEVEL",NF_FLOAT,1,id_lev,vid_lev)
    15431549        ierr=NF_DEF_VAR(nid,"cu",NF_FLOAT,2,(/id_lonu,id_latu/),vid_cu)
     1550        ierr=NF_DEF_VAR(nid,"au",NF_FLOAT,2,(/id_lonu,id_latu/),vid_au)
    15441551        ierr=NF_DEF_VAR(nid,"cv",NF_FLOAT,2,(/id_lonv,id_latv/),vid_cv)
     1552        ierr=NF_DEF_VAR(nid,"av",NF_FLOAT,2,(/id_lonv,id_latv/),vid_av)
    15451553       
    15461554        ierr=NF_ENDDEF(nid)
     
    15551563        ierr = NF_PUT_VAR_DOUBLE(nid,vid_cu,cu)
    15561564        ierr = NF_PUT_VAR_DOUBLE(nid,vid_cv,cv)
     1565        ierr = NF_PUT_VAR_DOUBLE(nid,vid_au,alpha_u)
     1566        ierr = NF_PUT_VAR_DOUBLE(nid,vid_av,alpha_v)
    15571567#else
    15581568        ierr = NF_PUT_VAR_REAL(nid,vid_lonu,rlonu*180./pi)
     
    15631573        ierr = NF_PUT_VAR_REAL(nid,vid_cu,cu)
    15641574        ierr = NF_PUT_VAR_REAL(nid,vid_cv,cv)
     1575        ierr = NF_PUT_VAR_REAL(nid,vid_au,alpha_u)
     1576        ierr = NF_PUT_VAR_REAL(nid,vid_av,alpha_v)
    15651577#endif
    15661578! --------------------------------------------------------------------
     
    15791591        IF (guide_u) THEN
    15801592            dim4=(/id_lonu,id_latu,id_lev,id_tim/)
     1593            ierr = NF_DEF_VAR(nid,"u",NF_FLOAT,4,dim4,varid)
     1594            ierr = NF_DEF_VAR(nid,"ua",NF_FLOAT,4,dim4,varid)
    15811595            ierr = NF_DEF_VAR(nid,"ucov",NF_FLOAT,4,dim4,varid)
    15821596        ENDIF
     
    15841598        IF (guide_v) THEN
    15851599            dim4=(/id_lonv,id_latv,id_lev,id_tim/)
     1600            ierr = NF_DEF_VAR(nid,"v",NF_FLOAT,4,dim4,varid)
     1601            ierr = NF_DEF_VAR(nid,"va",NF_FLOAT,4,dim4,varid)
    15861602            ierr = NF_DEF_VAR(nid,"vcov",NF_FLOAT,4,dim4,varid)
    15871603        ENDIF
     
    16061622    ierr=NF_OPEN("guide_ins.nc",NF_WRITE,nid)
    16071623
     1624    IF (varname=="SP") timestep=timestep+1
     1625
     1626    ierr = NF_INQ_VARID(nid,varname,varid)
    16081627    SELECT CASE (varname)
    1609     CASE ("S")
    1610         timestep=timestep+1
    1611         ierr = NF_INQ_VARID(nid,"SP",varid)
     1628    CASE ("SP","ps")
    16121629        start=(/1,1,timestep,0/)
    16131630        count=(/iip1,jjp1,1,0/)
    1614 #ifdef NC_DOUBLE
    1615         ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
    1616 #else
    1617         ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
    1618 #endif
    1619     CASE ("P")
    1620         ierr = NF_INQ_VARID(nid,"ps",varid)
    1621         start=(/1,1,timestep,0/)
    1622         count=(/iip1,jjp1,1,0/)
    1623 #ifdef NC_DOUBLE
    1624         ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
    1625 #else
    1626         ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
    1627 #endif
    1628     CASE ("U")
    1629         ierr = NF_INQ_VARID(nid,"ucov",varid)
     1631    CASE ("v","va","vcov")
     1632        start=(/1,1,1,timestep/)
     1633        count=(/iip1,jjm,llm,1/)
     1634    CASE DEFAULT
    16301635        start=(/1,1,1,timestep/)
    16311636        count=(/iip1,jjp1,llm,1/)
     1637    END SELECT
     1638
     1639    SELECT CASE (varname)
     1640    CASE("u","ua")
     1641        DO l=1,llm ; field2(:,2:jjm,l)=field(:,2:jjm,l)/cu(:,2:jjm) ; ENDDO
     1642        field2(:,1,:)=0. ; field2(:,jjp1,:)=0.
     1643    CASE("v","va")
     1644        DO l=1,llm ; field2(:,:,l)=field(:,:,l)/cv(:,:) ; ENDDO
     1645    CASE DEFAULT
     1646        field2=field
     1647    END SELECT
     1648
     1649
    16321650#ifdef NC_DOUBLE
    1633         ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
     1651    ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field2)
    16341652#else
    1635         ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
     1653    ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field2)
    16361654#endif
    1637     CASE ("V")
    1638         ierr = NF_INQ_VARID(nid,"vcov",varid)
    1639         start=(/1,1,1,timestep/)
    1640         count=(/iip1,jjm,llm,1/)
    1641 #ifdef NC_DOUBLE
    1642         ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
    1643 #else
    1644         ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
    1645 #endif
    1646     CASE ("T")
    1647         ierr = NF_INQ_VARID(nid,"teta",varid)
    1648         start=(/1,1,1,timestep/)
    1649         count=(/iip1,jjp1,llm,1/)
    1650 #ifdef NC_DOUBLE
    1651         ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
    1652 #else
    1653         ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
    1654 #endif
    1655     CASE ("Q")
    1656         ierr = NF_INQ_VARID(nid,"q",varid)
    1657         start=(/1,1,1,timestep/)
    1658         count=(/iip1,jjp1,llm,1/)
    1659 #ifdef NC_DOUBLE
    1660         ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
    1661 #else
    1662         ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
    1663 #endif
    1664     END SELECT
    1665  
     1655
    16661656    ierr = NF_CLOSE(nid)
    16671657
Note: See TracChangeset for help on using the changeset viewer.