Ir para conteúdo
Fórum Script Brasil

patbuzzatto

Membros
  • Total de itens

    3
  • Registro em

  • Última visita

Sobre patbuzzatto

patbuzzatto's Achievements

0

Reputação

  1. Já descobri o erro, eu precisava adicionar o dados a outra estrutura de partículas. for (int i=1;i<r->N;i++){ struct reb_particle p = r->particles[i]; p.ap = (void*)dados; printf("\n\n%lf\n\n", ((Forcas_inf *)p.ap)->beta); } Existe uma maneira te adicionar a estrutura de uma maneira geral? Sem precisar adicionar a cada vez que criar um objeto?
  2. Oie, acho que entendi. Fiz um teste básico e deu certo, então tentei implementar no meu programa da seguinte maneira: typedef struct Dados{ double beta; }Forcas_inf; int main(int argc, char* argv[]){ ... Forcas_inf *dados = ( Forcas_inf* ) malloc ( sizeof( Forcas_inf ) ); // Criamos dinamicamente os dados que expandirão a estrutura reb_particle int pi = 0; while(r->N<2){ struct reb_particle p = {0}; p.hash = pi; double ratio = 1; //[micrometro] double densityP = 1; //[g.cm^-3] betaparticles = 0.6/(ratio * densityP); p.ap = (void*)dados; // Fazemos que o ponteiro generico ap aponte aos dados que queremos adicionar a reb_particle ((Forcas_inf *)p.ap)->beta = betaparticles; // Agora para entender essa linha leia abaixo: printf("\n\n%lf\n\n", ((Forcas_inf *)p.ap)->beta); double a = 97700e3; // pico do anel mu double e = 0;//0.01; //excentricidade double inc = 0; //inclinação da particula no plano double Omega = 0; //Longitude do nó ascendente double omega = 0; //pericentro //double f = reb_random_uniform(0,2.*M_PI); //verdadeira anomalia double f = 0; //verdadeira anomalia double m = 0; //massa //Retorna uma estrutura da partícula com os parâmetros orbitais p = reb_tools_orbit_to_particle(r->G,planet,m,a,e,inc,Omega,omega,f); p.r = ratio*1e-6; reb_add(r, p); pi++; } for (int i=1;i<r->N;i++){ struct reb_particle p = r->particles[i]; printf("\n\n%lf\n\n", ((Forcas_inf *)p.ap)->beta); } ... } É ai que ocorre o problema, aquele printf dentro do while funciona, agora o fora que esta dentro do for esta dando erro: /opt/torque/mom_priv/jobs/175884.saturn.cluster.loc.SC: line 7: 13004 Segmentation fault (core dumped) nice -n 19 ./rebound Já garanti no for que nenhuma partícula que não tenha o beta esteja sendo utilizada ali.
  3. Boa noite, eu estou utilizando um integrador de n-corpos todo escrito em C que é o pacote chamado Rebound. Para o meu projeto o ideal seria adicionar novas variáveis em uma das estruturas do Rebound. A estrutura que o pacote vem é: struct reb_particle { double x; ///< x-position of the particle. double y; ///< y-position of the particle. double z; ///< z-position of the particle. double vx; ///< x-velocity of the particle. double vy; ///< y-velocity of the particle. double vz; ///< z-velocity of the particle. double ax; ///< x-acceleration of the particle. double ay; ///< y-acceleration of the particle. double az; ///< z-acceleration of the particle. double m; ///< Mass of the particle. double r; ///< Radius of the particle. double lastcollision; ///< Last time the particle had a physical collision. struct reb_treecell* c; ///< Pointer to the cell the particle is currently in. uint32_t hash; ///< hash to identify particle. void* ap; ///< Functionality for externally adding additional properties to particles. struct reb_simulation* sim; ///< Pointer to the parent simulation. }; Eu gostaria de adicionar, dado a seguir, as variáveis externamente, sem alterar o código fonte do pacote. double J2; //coeficiente J2 de achatamento planetário double J4; //coeficiente J4 de achatamento planetário double beta; //relação adimensional da força gravitacional e de radiação solar Eu realmente não sei qual seria a maneira ideal de fazer isso, eu sei que ele tem isso: void* ap; ///< Functionality for externally adding additional properties to particles. Mas eu nunca trabalhei com algo do gênero e nem sei se realmente serve para o que eu estou querendo. Não sei se consegui explicar direito o que eu preciso, só tentei ser o mais direta possível, mas se alguém puder dar alguma luz, ficarei muito grata.
×
×
  • Criar Novo...