Changeset 675


Ignore:
Timestamp:
06/01/09 14:59:57 (16 years ago)
Author:
Mathieu Morlighem
Message:

fixed output from diagnostic (2,3 or 4 dofs)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/parallel/ProcessResults.cpp

    r669 r675  
    4646        int ismacayealpattyn;
    4747        int isstokes;
     48        int dim;
    4849
    4950        /*intermediary: */
     
    8384       
    8485                /*some flags needed: */
     86                fem_dh->parameters->FindParam((void*)&dim,"dim");
    8587                fem_dhu->parameters->FindParam((void*)&ishutter,"ishutter");
    8688                fem_ds->parameters->FindParam((void*)&isstokes,"isstokes");
     
    9193                fem_p=fems+0;
    9294        }
    93        
    9495
    9596        for(n=0;n<results->Size();n++){
     
    9899               
    99100                if(strcmp(result->GetFieldName(),"u_g")==0){
    100                         /*Ok, are we dealing with velocities coming from MacAyeal, Pattyin, Hutter, on 2 dofs? or from
     101                        /*Ok, are we dealing with velocities coming from MacAyeal, Pattyin, Hutter, on 2,3 dofs or
    101102                         *Stokes on 4 dofs: */
    102103                        result->GetField(&u_g);
    103104                        VecToMPISerial(&u_g_serial,u_g);
    104105
    105                         if(!isstokes){
     106                        //2d results -> 2 dofs per node
     107                        if (dim==2){
    106108                                /*ok, 2 dofs, on number of nodes: */
    107109                                if(ismacayealpattyn){
     
    126128                                        vel[i]=sqrt(pow(vx[i],2)+pow(vy[i],2)+pow(vz[i],2));
    127129                                }
    128 
    129                         }
     130                        }
     131
     132                        //3d results -> 3 or 4 (stokes) dofs per node
    130133                        else{
    131                                 /* 4 dofs on number of nodes. discard pressure: */
    132                                 fem_ds->parameters->FindParam((void*)&numberofnodes,"numberofnodes");
    133                                 VecToMPISerial(&partition,fem_ds->partition);
    134                                 fem_ds->parameters->FindParam((void*)&yts,"yts");
    135                                 vx=(double*)xmalloc(numberofnodes*sizeof(double));
    136                                 vy=(double*)xmalloc(numberofnodes*sizeof(double));
    137                                 vz=(double*)xmalloc(numberofnodes*sizeof(double));
    138                                 vel=(double*)xmalloc(numberofnodes*sizeof(double));
    139                                 for(i=0;i<numberofnodes;i++){
    140                                         vx[i]=u_g_serial[4*(int)partition[i]+0]*yts;
    141                                         vy[i]=u_g_serial[4*(int)partition[i]+1]*yts;
    142                                         vz[i]=u_g_serial[4*(int)partition[i]+2]*yts;
    143                                         vel[i]=sqrt(pow(vx[i],2)+pow(vy[i],2)+pow(vz[i],2));
     134
     135                                if(!isstokes){
     136                                        /*ok, 3 dofs, on number of nodes: */
     137                                        if(ismacayealpattyn){
     138                                                fem_dh->parameters->FindParam((void*)&numberofnodes,"numberofnodes");
     139                                                VecToMPISerial(&partition,fem_dh->partition);
     140                                                fem_dh->parameters->FindParam((void*)&yts,"yts");
     141                                        }
     142                                        else{
     143                                                fem_dhu->parameters->FindParam((void*)&numberofnodes,"numberofnodes");
     144                                                VecToMPISerial(&partition,fem_dhu->partition);
     145                                                fem_dhu->parameters->FindParam((void*)&yts,"yts");
     146                                        }
     147                                        vx=(double*)xmalloc(numberofnodes*sizeof(double));
     148                                        vy=(double*)xmalloc(numberofnodes*sizeof(double));
     149                                        vz=(double*)xmalloc(numberofnodes*sizeof(double));
     150                                        vel=(double*)xmalloc(numberofnodes*sizeof(double));
     151
     152                                        for(i=0;i<numberofnodes;i++){
     153                                                vx[i]=u_g_serial[3*(int)partition[i]+0]*yts;
     154                                                vy[i]=u_g_serial[3*(int)partition[i]+1]*yts;
     155                                                vz[i]=u_g_serial[3*(int)partition[i]+2]*yts;
     156                                                vel[i]=sqrt(pow(vx[i],2)+pow(vy[i],2)+pow(vz[i],2));
     157                                        }
     158                                }
     159
     160                                else{
     161                                        /* 4 dofs on number of nodes. discard pressure: */
     162                                        fem_ds->parameters->FindParam((void*)&numberofnodes,"numberofnodes");
     163                                        VecToMPISerial(&partition,fem_ds->partition);
     164                                        fem_ds->parameters->FindParam((void*)&yts,"yts");
     165                                        vx=(double*)xmalloc(numberofnodes*sizeof(double));
     166                                        vy=(double*)xmalloc(numberofnodes*sizeof(double));
     167                                        vz=(double*)xmalloc(numberofnodes*sizeof(double));
     168                                        vel=(double*)xmalloc(numberofnodes*sizeof(double));
     169                                        for(i=0;i<numberofnodes;i++){
     170                                                vx[i]=u_g_serial[4*(int)partition[i]+0]*yts;
     171                                                vy[i]=u_g_serial[4*(int)partition[i]+1]*yts;
     172                                                vz[i]=u_g_serial[4*(int)partition[i]+2]*yts;
     173                                                vel[i]=sqrt(pow(vx[i],2)+pow(vy[i],2)+pow(vz[i],2));
     174                                        }
    144175                                }
    145176                        }
     
    162193                        xfree((void**)&partition);
    163194                }
     195
    164196                else if(strcmp(result->GetFieldName(),"p_g")==0){
    165197                        /*easy, p_g is of size numberofnodes, on 1 dof, just repartition: */
     
    196228                        xfree((void**)&partition);
    197229                }
     230
    198231                else if(strcmp(result->GetFieldName(),"h_g")==0){
    199232                        /*easy, h_g is of size numberofnodes, on 1 dof, just repartition: */
     
    217250                        xfree((void**)&partition);
    218251                }
     252
    219253                else if(strcmp(result->GetFieldName(),"param_g")==0){
    220254                        /*easy, param_g is of size numberofnodes, on 1 dof, just repartition: */
     
    238272                        xfree((void**)&partition);
    239273                }
     274
    240275                else{
    241276                        /*Just copy the result into the new results dataset: */
Note: See TracChangeset for help on using the changeset viewer.