Changeset 13695


Ignore:
Timestamp:
10/16/12 11:06:06 (12 years ago)
Author:
jschierm
Message:

NEW: Implemented RiftStruct for Python WriteData.

Location:
issm/trunk-jpl/src/c
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp

    r13638 r13695  
    328328                SetStructureFieldi(dataref,i,"tips"             ,1                                  ,2,&riftstruct->riftstips[2*i]);
    329329                SetStructureFieldi(dataref,i,"penaltypairs"     ,riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]);
     330                SetStructureFieldi(dataref,i,"fill"             ,IceEnum);
    330331                SetStructureFieldi(dataref,i,"friction"         ,0);
    331                 SetStructureFieldi(dataref,i,"fill"             ,IceEnum);
    332332                SetStructureFieldi(dataref,i,"fraction"         ,0.);
    333333                SetStructureFieldi(dataref,i,"fractionincrement",0.1);
  • TabularUnified issm/trunk-jpl/src/c/python/io/WritePythonData.cpp

    r13640 r13695  
    2020#include "../../EnumDefinitions/EnumDefinitions.h"
    2121PyObject* PyArrayFromCopiedData(int dims[2],double* data);
     22PyObject* PyArrayFromCopiedData(int dimi,int dimj,double* data);
    2223
    2324/*Primitive data types*/
     
    2526void WriteData(PyObject* py_tuple, int index, int integer){
    2627
    27         PyTuple_SetItem(py_tuple, index, PyInt_FromSsize_t(integer));
     28        PyTuple_SetItem(py_tuple, index, PyInt_FromSsize_t((Py_ssize_t)integer));
    2829
    2930}/*}}}*/
     
    136137void WriteData(PyObject* py_tuple,int index,RiftStruct* riftstruct){
    137138
    138         _error_("not implemented yet... good luck John!");
     139//      _error_("not implemented yet... good luck John!");
     140
     141        int i;
     142        PyObject* list=NULL;
     143        PyObject** dict=NULL;
     144
     145        list=PyList_New((Py_ssize_t)0);
     146
     147        for (i=0; i<riftstruct->numrifts; i++) {
     148                dict[i]=PyDict_New();
     149
     150                PyDict_SetItemString(dict[i],"numsegs"          ,PyInt_FromSsize_t((Py_ssize_t)riftstruct->riftsnumsegments[i]));
     151                PyDict_SetItemString(dict[i],"segments"         ,PyArrayFromCopiedData(riftstruct->riftsnumsegments[i]    ,3,riftstruct->riftssegments[i]));
     152                PyDict_SetItemString(dict[i],"pairs"            ,PyArrayFromCopiedData(riftstruct->riftsnumpairs[i]       ,2,riftstruct->riftspairs[i]));
     153                PyDict_SetItemString(dict[i],"tips"             ,PyArrayFromCopiedData(1                                  ,2,&riftstruct->riftstips[2*i]));
     154                PyDict_SetItemString(dict[i],"penaltypairs"     ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]));
     155                PyDict_SetItemString(dict[i],"fill"             ,PyInt_FromSsize_t((Py_ssize_t)IceEnum));
     156                PyDict_SetItemString(dict[i],"friction"         ,PyInt_FromSsize_t((Py_ssize_t)0));
     157                PyDict_SetItemString(dict[i],"fraction"         ,PyFloat_FromDouble(0.));
     158                PyDict_SetItemString(dict[i],"fractionincrement",PyFloat_FromDouble(0.1));
     159                PyDict_SetItemString(dict[i],"state"            ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],1,riftstruct->state[i]));
     160
     161                PyList_Append(list, dict[i]);
     162        }
     163
     164        PyTuple_SetItem(py_tuple, index, list);
    139165}
    140166/*}}}*/
     
    157183}
    158184/*}}}*/
     185/*FUNCTION PyArrayFromCopiedData(int dimi,int dimj,double* data){{{*/
     186PyObject* PyArrayFromCopiedData(int dimi,int dimj,double* data){
     187
     188        double* pydata;
     189        npy_intp pydims[2]={0,0};
     190
     191        /*  note that PyArray_SimpleNewFromData does not copy the data, so that when the original
     192                 object (e.g. bamggeom,bamgmesh) is deleted, the data is gone.  */
     193
     194        pydims[0]=(npy_intp)dimi;
     195        pydims[1]=(npy_intp)dimj;
     196        pydata=xNew<IssmDouble>(dimi*dimj);
     197        memcpy(pydata,data,dimi*dimj*sizeof(double));
     198        return PyArray_SimpleNewFromData(2,pydims,NPY_DOUBLE,pydata);
     199}
     200/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.