Changeset 4428


Ignore:
Timestamp:
07/07/10 11:03:54 (15 years ago)
Author:
jschierm
Message:

CreateParametersQmu.cpp: write qmu_mass_flux_num_segments to models (limited to serial, for now).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp

    r4236 r4428  
    3939        double* qmu_mass_flux_segments=NULL;
    4040        double* my_qmu_mass_flux_segments=NULL;
    41         int num_qmu_mass_flux_segments=0;
    42         int my_num_qmu_mass_flux_segments=0;
     41        double* qmu_mass_flux_num_segments=NULL;
     42        double* my_qmu_mass_flux_num_segments=NULL;
     43        int tot_qmu_mass_flux_segments=0;
     44        int my_tot_qmu_mass_flux_segments=0;
     45        int tot_qmu_mass_flux_num_segments=0;
     46        int my_tot_qmu_mass_flux_num_segments=0;
    4347
    4448        #ifdef _SERIAL_
     
    155159
    156160                                /*We need the qmu_mass_flux_segments to be able to compute the mass flux: */
    157                                 IoModelFetchData(&qmu_mass_flux_segments,&num_qmu_mass_flux_segments,NULL,iomodel_handle,"qmu_mass_flux_segments");
     161                                IoModelFetchData(&qmu_mass_flux_segments,&tot_qmu_mass_flux_segments,NULL,iomodel_handle,"qmu_mass_flux_segments");
     162                                IoModelFetchData(&qmu_mass_flux_num_segments,&tot_qmu_mass_flux_num_segments,NULL,iomodel_handle,"qmu_mass_flux_num_segments");
    158163
    159164                                #ifdef _PARALLEL_
     
    164169                                                /*Use the element partitioning vector from the iomodel to down select qmu_mass_flux_segments to only segments that are relevant
    165170                                                 * to this cpu: */
    166                                                 my_num_qmu_mass_flux_segments=0;
    167                                                 for(j=0;j<num_qmu_mass_flux_segments;j++){
    168                                                         if (  iomodel->my_elements[(int)(*(qmu_mass_flux_segments+5*j+4))-1])my_num_qmu_mass_flux_segments++;
     171                                                my_tot_qmu_mass_flux_segments=0;
     172                                                for(j=0;j<tot_qmu_mass_flux_segments;j++){
     173                                                        if (  iomodel->my_elements[(int)(*(qmu_mass_flux_segments+5*j+4))-1])my_tot_qmu_mass_flux_segments++;
    169174                                                }
    170175
    171176                                       
    172                                                 if(my_num_qmu_mass_flux_segments){
    173                                                         my_qmu_mass_flux_segments=(double*)xcalloc(5*my_num_qmu_mass_flux_segments,sizeof(double));
     177                                                if(my_tot_qmu_mass_flux_segments){
     178                                                        my_qmu_mass_flux_segments=(double*)xcalloc(5*my_tot_qmu_mass_flux_segments,sizeof(double));
    174179                                                        second_count=0;
    175                                                         for(j=0;j<num_qmu_mass_flux_segments;j++){
     180                                                        for(j=0;j<tot_qmu_mass_flux_segments;j++){
    176181                                                                if (iomodel->my_elements[(int)*(qmu_mass_flux_segments+5*j+4)-1]){
    177182                                                                        for(k=0;k<5;k++)*(my_qmu_mass_flux_segments+5*second_count+k)=*(qmu_mass_flux_segments+5*j+k);
     
    181186                                                }
    182187
    183                                                 parameters->AddObject(new DoubleMatParam(QmuMassFluxSegmentsEnum,my_qmu_mass_flux_segments,my_num_qmu_mass_flux_segments,5));
     188                                                parameters->AddObject(new DoubleMatParam(QmuMassFluxSegmentsEnum,my_qmu_mass_flux_segments,my_tot_qmu_mass_flux_segments,5));
    184189
    185190                                        }
     
    187192                                #else
    188193
    189                                         parameters->AddObject(new DoubleMatParam(QmuMassFluxSegmentsEnum,qmu_mass_flux_segments,num_qmu_mass_flux_segments,5));
     194                                        parameters->AddObject(new DoubleMatParam(QmuMassFluxSegmentsEnum,qmu_mass_flux_segments,tot_qmu_mass_flux_segments,5));
     195                                        parameters->AddObject(new DoubleVecParam(QmuMassFluxNumSegmentsEnum,qmu_mass_flux_num_segments,tot_qmu_mass_flux_num_segments));
    190196
    191197                                #endif
     
    193199                                xfree((void**)&qmu_mass_flux_segments);
    194200                                xfree((void**)&my_qmu_mass_flux_segments);
     201                                xfree((void**)&qmu_mass_flux_num_segments);
     202                                xfree((void**)&my_qmu_mass_flux_num_segments);
    195203                        }
    196204                        if (strcmp(descriptor,"misfit")==0){
Note: See TracChangeset for help on using the changeset viewer.